"""
No processing implementation - the default preprocessor.

This module provides the NoProcessing class which serves as the default
preprocessor (ID=0) that returns data unchanged.
"""

import pandas as pd
from ..base import PreprocessorInterface
from ..validation import validate_input_data, safe_copy_dataframe


class NoProcessing(PreprocessorInterface):
    """
    Default preprocessor that applies no processing to the data.
    
    This class serves as the baseline preprocessor (ID=0) that returns
    the input data unchanged. It's useful for creating combinations where
    some layers should not apply any preprocessing.
    """
    
    def process(self, data: pd.DataFrame) -> pd.DataFrame:
        """
        Return the data unchanged.
        
        Args:
            data (pd.DataFrame): Input DataFrame
            
        Returns:
            pd.DataFrame: The same DataFrame without any modifications
            
        Raises:
            PreprocessorValidationError: If input data is None or invalid
        """
        validate_input_data(data)
        
        # Return a copy to avoid unintended modifications
        return safe_copy_dataframe(data)
    
    def get_name(self) -> str:
        """
        Return human-readable name for this preprocessor.
        
        Returns:
            str: Human-readable name
        """
        return "No Processing"
    
    def get_id(self) -> int:
        """
        Return unique identifier for this preprocessor.
        
        Returns:
            int: Unique identifier (always 0 for no processing)
        """
        return 0